import axios, { type AxiosInstance, type AxiosResponse } from 'axios'
import { ElMessage } from 'element-plus'

// 创建 axios 实例
const service: AxiosInstance = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL || '',  // 开发环境留空，走 Vite proxy
  timeout: 15000,
  headers: {
    'Content-Type': 'application/json',
  },
})

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 可以在这里添加 token
    return config
  },
  (error) => {
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  (response: AxiosResponse) => {
    const res = response.data
    
    // 如果响应被包装在 {code, msg, data} 结构中
    if (res.code !== undefined) {
      // 显示操作消息
      if (res.msg && response.config.method !== 'get') {
        ElMessage.success(res.msg)
      }
      // 返回实际数据
      return res.data || res
    }
    
    // 如果响应中有 message 字段（直接返回的格式）
    if (res.message && response.status === 200) {
      if (response.config.method !== 'get') {
        ElMessage.success(res.message)
      }
    }
    
    return res
  },
  (error) => {
    console.error('响应错误:', error)
    
    if (error.response) {
      const message = error.response.data?.message || error.response.data?.msg || '请求失败'
      ElMessage.error(message)
    } else if (error.request) {
      ElMessage.error('网络错误，请检查网络连接')
    } else {
      ElMessage.error('请求配置错误')
    }
    
    return Promise.reject(error)
  }
)

export default service
